import java.util.HashMap;

public class question_01 {
}
class Solution_01 {
    public int[] twoSum(int[] nums, int target) {
//        int i=0,j=0;
//        for (i = 0; i < nums.length; i++) {
//            for (j = 0; j < nums.length; j++) {
//                if(i==j)
//                    continue;
//                if(nums[i]+nums[j]==target){
//                    int arr[]=new int[2];
//                    arr[0]=i;
//                    arr[1]=j;
//                    return arr;
//                }
//            }
//        }
//        return new int[2];
        //上面的这种解法，不仅暴力，而且还很傻逼，下面也是暴力解法，但是做了一些优化
//        int i=0,j=0;
//        int len=nums.length;
//        //注意，组合的时候1和5组即【1,5】和5和1组是一样的，即【5,1】，所以我只需要选择其中一种方式就行了，可以节约循环次数
//        for ( i = 0; i <len-1 ; i++) {
//            for ( j = i+1; j < len; j++) {
//                if(nums[i]+nums[j]==target)
//                    return new int[]{i,j};
//            }
//        }
//        return new int[2];

        //解法3 哈希表法，用空间来换取时间的方法
        int i=0,len=nums.length;
        HashMap<Integer, Integer> map = new HashMap<>();
        //只需要通过一次的遍历就可以
        for (  i = 0; i < len; i++) {
            if(map.get(target-nums[i])==null){//表示没有找到
                map.put(nums[i],i );
            }else{
                return new int[]{i,map.get(target-nums[i])};
            }
        }
        return new int[2];
    }
}













